package com.dc.refactoring._5_简化函数调用._9_IntroduceParameterObject.newObject;

import java.util.List;

/**
 * Description: 账户
 * @author: gdc
 * @date: 2020/12/10
 * @version 1.0
 */
public class Account {

    /**
     * 账项列表
     */
    private List<Entry> entries;


    /**
     * 获取给定日期范围内的账项
     * @param dateRange     日期范围类
     * @return              金额
     */
    // 【1】第一种改造，使用日期范围类，替换掉日期参数列表
    double getFlowBetween(DateRange dateRange) {
        double result = 0;
        for (Entry entry : entries) {
            if (entry.getChargeDate().compareTo(dateRange.getStart()) >= 0 && entry.getChargeDate().compareTo(dateRange.getEnd()) <= 0) {
                result += entry.getItem();
            }
        }
        return result;
    }

    // 【2】第二种改造，在第一种改造的基础上，通过搬移函数，将判断逻辑 迁移到引用类中
    double getFlowBetween2(DateRange dateRange) {
        double result = 0;
        for (Entry entry : entries) {
            if (dateRange.includes(entry.getChargeDate())) {
                result += entry.getItem();
            }
        }
        return result;
    }

}
